Token-based Authentication (JWT)

Web Development - এএসপি ডট (ASP.Net) - Authentication এবং Authorization |
3
3

Token-based Authentication একটি আধুনিক নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীকে সার্ভারের সাথে নিরাপদভাবে যোগাযোগ করতে অনুমতি দেয়। JSON Web Token (JWT) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদ তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনে JWT ব্যবহার করা হয় ব্যবহারকারীকে অথেন্টিকেট করার জন্য। এই পদ্ধতিতে, সার্ভার একটি টোকেন প্রদান করে, যা পরবর্তীতে ক্লায়েন্ট দ্বারা সাবমিট করা হয় এবং সার্ভার এই টোকেনের মাধ্যমে ব্যবহারকারীকে অথেন্টিকেট করে।

JWT কী?

JWT একটি কমপ্যাক্ট এবং স্বনির্ভর স্ট্যান্ডার্ড যা তিনটি অংশে বিভক্ত:

  1. Header: টোকেনের ধরণ এবং এলগরিদম উল্লেখ করে।
  2. Payload: ব্যবহারকারীর তথ্য বা ক্লেইম ধারণ করে। (যেমন, ব্যবহারকারীর আইডি, ভূমিকা ইত্যাদি)
  3. Signature: টোকেনটির স্বাক্ষর যা এটি নিরাপদ রাখে, যাতে কেউ এটিকে ম্যানিপুলেট করতে না পারে।

JWT এর গঠন:

Header.Payload.Signature

Token-based Authentication প্রক্রিয়া

  1. Login: ব্যবহারকারী যখন তার ক্রেডেনশিয়ালস (ইউজারনেম এবং পাসওয়ার্ড) দিয়ে লগইন করে, তখন সার্ভার একটি JWT তৈরি করে এবং ক্লায়েন্টকে পাঠায়।
  2. Store Token: ক্লায়েন্ট এই টোকেনটি স্টোর করে (সাধারণত ব্রাউজারের localStorage বা sessionStorage তে)।
  3. Send Token in Request: পরবর্তী রিকোয়েস্টে, ক্লায়েন্ট টোকেনটিকে HTTP হেডারে পাঠায়।
  4. Verify Token: সার্ভার রিসিভ করা JWT যাচাই করে এবং নির্দিষ্ট অ্যাক্সেস অনুমতি দেয়।

ASP.Net Core অ্যাপে JWT Authentication সেটআপ করা

১. NuGet প্যাকেজ ইনস্টল করা

JWT Authentication ব্যবহার করতে Microsoft.AspNetCore.Authentication.JwtBearer প্যাকেজটি ইনস্টল করতে হবে।

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

২. Startup.cs ফাইলে JWT Authentication কনফিগারেশন

ASP.Net Core অ্যাপ্লিকেশনে JWT Authentication কনফিগার করতে আপনাকে Startup.cs ফাইলে কিছু সেটিংস করতে হবে।

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // JWT Authentication কনফিগারেশন
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.RequireHttpsMetadata = false;  // HTTPS বাধ্যতামূলক নয়
                    options.SaveToken = true;              // টোকেন সেভ করা হবে
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,
                        ValidIssuer = "your-issuer",
                        ValidAudience = "your-audience",
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
                    };
                });

        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        // JWT Authentication Middleware ব্যবহার
        app.UseAuthentication();

        // Authorization Middleware ব্যবহার
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

এখানে:

  • TokenValidationParameters ব্যবহার করে আমরা JWT এর বিভিন্ন বৈশিষ্ট্য যাচাই করি, যেমন: Issuer, Audience, Lifetime, এবং Signing Key
  • IssuerSigningKey সেট করা হয়েছে SymmetricSecurityKey দিয়ে, যেখানে আমাদের সিক্রেট কী ব্যবহার করা হয়েছে। এই কী দিয়ে টোকেনের সিগনেচার ভেরিফাই করা হবে।

৩. JWT টোকেন তৈরি করা

অথেন্টিকেশন সফল হলে, আপনাকে JWT টোকেন তৈরি করতে হবে এবং তা ক্লায়েন্টকে পাঠাতে হবে। এটি করার জন্য একটি অ্যাকশন তৈরি করা হয় যা ক্রেডেনশিয়াল যাচাইয়ের পর একটি টোকেন রিটার্ন করবে।

public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public AuthController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel login)
    {
        if (login.Username == "admin" && login.Password == "password")
        {
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, login.Username),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: _configuration["Jwt:Issuer"],
                audience: _configuration["Jwt:Audience"],
                claims: claims,
                expires: DateTime.Now.AddHours(1),
                signingCredentials: creds
            );

            return Ok(new
            {
                token = new JwtSecurityTokenHandler().WriteToken(token)
            });
        }

        return Unauthorized();
    }
}

এখানে:

  • login.Username এবং login.Password যাচাই করার পর, JWT টোকেন তৈরি করা হচ্ছে।
  • JwtSecurityToken তৈরি করা হচ্ছে এবং সাইনিং ক্রিডেনশিয়ালস সেট করা হচ্ছে।
  • তারপর, JwtSecurityTokenHandler এর মাধ্যমে টোকেনটি স্ট্রিং হিসেবে ক্লায়েন্টে পাঠানো হচ্ছে।

৪. Token পাঠানো এবং যাচাই

প্রতিটি রিকোয়েস্টে, ক্লায়েন্ট JWT টোকেনটি Authorization Header এ পাঠায়।

GET /api/values
Authorization: Bearer <your-token-here>

ASP.Net Core এই টোকেনটি গ্রহণ করে এবং যাচাই করে, এবং যদি টোকেনটি বৈধ হয়, তবে রিকোয়েস্টটি প্রসেস করা হয়।


সারাংশ

  • JWT Authentication একটি নিরাপদ এবং সহজ পদ্ধতি যা ASP.Net Core অ্যাপ্লিকেশনে ব্যবহারকারীদের অথেন্টিকেট করতে সাহায্য করে।
  • এটি JSON Web Token (JWT) ব্যবহার করে ব্যবহারকারীদের পরিচয় যাচাই করে এবং পরবর্তী রিকোয়েস্টের জন্য টোকেন প্রদান করে।
  • Startup.cs ফাইলে JWT কনফিগারেশন, টোকেন তৈরি এবং সাইনিং ক্রিডেনশিয়ালস কনফিগার করে টোকেন প্রক্রিয়াটি সম্পন্ন হয়।
  • Authorization হেডারে Bearer token পাঠিয়ে নিরাপদভাবে API রিকোয়েস্ট করা যায়।

JWT Authentication আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং স্কেলেবল করে তোলে, কারণ এটি স্টেটলেস এবং সেশনের প্রয়োজন হয় না।

Content added By
Promotion